Repository navigation
Эксперты программы: приглашения, распределение и кабинет оценки - #788
Merged
Merged
Conversation
9 tasks done
TThanos3000
marked this pull request as ready for review
October 18, 2026 01:49
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Выложено на DEV: backend deployment, затем Angular #445. Миграции, pinned Web/Celery images, nginx/admin/celery и live route smoke прошли.
Что изменено
Организатор программы приглашает экспертов по email, назначает сданные проекты вручную или через предпросмотр автораспределения и меняет необходимое число оценщиков. Эксперт явно принимает приглашение и получает личный список программ/назначений. Существующий аккаунт сохраняет основную роль.
Зачем
Перенести управление экспертами из Django Admin в панель организатора. Согласованные макеты: эксперты, приглашение, кабинет. Реализация и rollout только на dev.
Реализация
Новая таблица приглашений хранит digest случайной ссылки; срок 7 дней, resend меняет token, revoke отменяет непринятое приглашение. Celery использует существующий mail backend и queued/sent/failed. Короткая регистрация атомарно создаёт аккаунт и членство; email фиксирован, дата рождения не нужна только этому сценарию. Обычная регистрация и редактирование обычного профиля сохраняют требование даты. Reset сохраняет контекст приглашения, включая повторный вход после принятия.
Ручные назначения защищают любые сохранённые оценки. Все новые organizer writes и scoring используют блокировку программы. Подписанный 15-минутный план сверяет revision состава, проектов, команды, назначений и оценок. Pending и собственная команда исключены. N — минимум полных оценок; изменение N сохраняет оценки и назначения. Полная форма принимает 0/False и необязательный комментарий; дедлайн проверяется сервером.
API
Новые
/programs/{id}/management/experts/,expert-invitations/,expert-allocation/,evaluators/;/evaluation/programs/, own acceptance и public token flow. Подробный контракт, ошибки и совместимость — docs/expert-workspace.md. Старые rating payload/endpoints сохранены. Новый Angular запрашивает assigned_only=1; организатор должен назначить проекты существующим экспертам.UI
В связанном Angular #445: пятая вкладка «Эксперты», центрированные модалки, путь приглашения и «Мои программы». Mont и существующие DS controls. Этот PR добавляет письмо и API, а также направляет /evaluation/ в API на DEV Nginx. Invited reset использует SPA /expert-password-reset/, обходя серверный /auth/.
Permissions
Менеджер проверяется в конкретной программе, expert membership — через Expert.programs, независимо от user_type. Есть negative tests на чужую программу/проект/эксперта, pending, другую почту, свою команду, protected scores, expired/revoked/replayed links и конкурентные записи. GET ссылки не принимает приглашение.
Проверки
Локальный полный прогон: 1102 теста; старые проверки кириллического поиска не прошли на Windows PostgreSQL с LC_CTYPE=C (upper кириллицы не преобразует регистр), teardown также встретил открытые async connections. Эти ограничения не объявляются зелёным full-suite result; Linux CI на 434082f прошёл: 1102 теста. Итоговый head33b28d5 также прошёл полный PostgreSQL CI; дополнительные recovery/SQLite feature checks пройдены отдельно.
Acceptance criteria
Не проверено
Фактическое попадание письма в inbox и live authenticated acceptance на dev. Локальная почта — locmem, реальные приглашения пользователям не отправлялись.
Риски / migration
Backend первым, Angular вторым. Migrations: users.0065 (nullable birthday), partner_programs.0022 (required_evaluators), project_rates.0004 (ExpertInvitation). DEV migration connection уже настроен отдельно от runtime. Обычные роли и данные не переносятся массово. Явное использование нового управления включает managed mode и восстанавливает назначения за историческими оценками. Откат nullable birthday после появления новых аккаунтов требует обработки данных; обратную миграцию вслепую не запускать. Production и React не затрагиваются.
DEV backend deployed: Deploy Dev. Migrations0022/0004/0065 applied, pinned Web/Celery image matches3b3d6e2, nginx/admin/celery passed. Anonymous live API returns401/404 JSON; SPA routes200 HTML.